package com.tools.helper;

public class BleBuffer {
    static int HEADER_LENGTH = 6;
    public byte[] value;
    public byte[] header = new byte[HEADER_LENGTH];
    public byte[] payload = new byte[32];

    public void set(byte[] value) {
        this.value = value;
        initByte();
    }

    private void initByte() {
        System.arraycopy(value, 0, header, 0, HEADER_LENGTH);
        System.arraycopy(value, HEADER_LENGTH, payload, 0, value.length - HEADER_LENGTH);
    }

    /**
     * 操作码，低字节在前
     */
    public int getOpcode() {
        byte[] data = payload;
        return Integer.parseInt(BleParser.byteToHex(data[2]) + BleParser.byteToHex(data[1]), 16);
    }

    /**
     * 状态码
     */
    public int getStatusCode() {
        return Integer.parseInt(BleParser.byteToHex(payload[3]), 16);
    }

    /**
     * 电量百分⽐
     */
    public int getBatteryLevel() {
        return Integer.parseInt(BleParser.byteToHex(payload[7]), 16);
    }

    /**
     * 探针⼯作状态
     */
    public int getStatus() {
        return Integer.parseInt(BleParser.byteToHex(payload[8]), 16);
    }

    /**
     * ⾁的成熟度
     */
    public int getDoneness() {
        return Integer.parseInt(BleParser.byteToHex(payload[11]), 16);
    }

    /**
     * 全局温度单位
     */
    public int getUnit() {
        return Integer.parseInt(BleParser.byteToHex(payload[12]), 16);
    }

    /**
     * 目标温度
     */
    public int getTarget() {
        byte[] data = payload;
        return Integer.parseInt(BleParser.byteToHex(data[14]) + BleParser.byteToHex(data[13]), 16);
    }

    /**
     * 内部温度 (内部温度，也叫⾁温)
     * 温度数值除以 10，才是实际温度，⽐如，100 => 10℃，312 => 31.2℃
     * 使⽤最⾼ bit 为 1 表示负数
     * -30℃ => -300 => 0x812C => ⼩端模式，接收到的数据是：2CH, 81H
     * 30℃ => 300 => 0x12C => ⼩端模式，接收到的数据是：2CH, 01H
     */
    public float getInternal() {
        byte[] data = payload;
        String hex = BleParser.byteToHex(data[16]);
        if (hex.length() > 1) {
            return Integer.parseInt(hex.charAt(1) + BleParser.byteToHex(data[15]), 16) / -10f;
        }
        return Integer.parseInt(hex + BleParser.byteToHex(data[15]), 16) / 10f;
    }

    /**
     * 外部温度 (外部温度，也叫炉温、环境温度等)
     * 温度数值除以 10，才是实际温度，⽐如，100 => 10℃，312 => 31.2℃
     * 使⽤最⾼ bit 为 1 表示负数
     * -30℃ => -300 => 0x812C => ⼩端模式，接收到的数据是：2CH, 81H
     * 30℃ => 300 => 0x12C => ⼩端模式，接收到的数据是：2CH, 01H
     */
    public float getAmbient() {
        byte[] data = payload;
        String hex = BleParser.byteToHex(data[18]);
        if (hex.length() > 1) {
            return Integer.parseInt(hex.charAt(1) + BleParser.byteToHex(data[17]), 16) / -10f;
        }
        return Integer.parseInt(hex + BleParser.byteToHex(data[17]), 16) / 10f;
    }
}
